"""
爬虫配置文件
"""
import os
from pathlib import Path
from datetime import datetime, timedelta

# 基础配置
BASE_DIR = Path(__file__).resolve().parent.parent

# 目标URL
LIST_PAGE_URL = "http://deal.ggzy.gov.cn/ds/deal/dealList.jsp"  # 列表页展示URL（用于Referer）
LIST_API_URL = "https://deal.ggzy.gov.cn/ds/deal/dealList_find.jsp"  # 列表页API接口
BASE_URL = "https://www.ggzy.gov.cn"

# 列表页API默认参数
# 动态设置：开始时间为今天-7天，结束时间为今天
_today = datetime.today().date()
_start_date = _today - timedelta(days=7)

LIST_API_DEFAULT_PARAMS = {
    'TIMEBEGIN_SHOW': str(_start_date),  # 开始时间显示（格式：YYYY-MM-DD）
    'TIMEEND_SHOW': str(_today),         # 结束时间显示（格式：YYYY-MM-DD）
    'TIMEBEGIN': str(_start_date),       # 开始时间（格式：YYYY-MM-DD）
    'TIMEEND': str(_today),              # 结束时间（格式：YYYY-MM-DD）
    'SOURCE_TYPE': '1',  # 来源类型
    'DEAL_TIME': '05',  # 交易时间类型
    # 'DEAL_TIME': '02',  # 交易时间类型
    'DEAL_CLASSIFY': '01',  # 交易分类（00=全部）
    'DEAL_STAGE': '0100',  # 交易阶段（0000=全部）
    'DEAL_PROVINCE': '0',  # 省份（0=全部）
    'DEAL_CITY': '0',  # 城市（0=全部）
    'DEAL_PLATFORM': '0',  # 交易平台（0=全部）
    'BID_PLATFORM': '0',  # 招标平台（0=全部）
    'DEAL_TRADE': '0',  # 交易行业（0=全部）
    'isShowAll': '1',  # 是否显示全部
    'PAGENUMBER': '1',  # 页码（从1开始）
    'FINDTXT': '',  # 搜索关键词
}

# 请求配置
REQUEST_TIMEOUT = 30  # 请求超时时间（秒）
MAX_RETRIES = 3  # 最大重试次数
RETRY_DELAY = 2  # 重试延迟（秒）
RETRY_BACKOFF = 2  # 指数退避倍数

# 频率控制
MIN_REQUEST_INTERVAL = 1  # 最小请求间隔（秒）
MAX_REQUEST_INTERVAL = 5  # 最大请求间隔（秒）
RANDOM_INTERVAL = True  # 是否使用随机间隔

# 代理配置
USE_PROXY = False  # 是否使用代理
PROXY_LIST = []  # 代理列表，格式: ['http://user:pass@host:port', ...]
PROXY_ROTATION = True  # 是否轮换代理

# SSL配置
VERIFY_SSL = False  # 是否验证SSL证书（设置为False以禁用SSL验证，解决SSL握手失败问题）

# 数据存储配置
SAVE_HTML_TO_FILE = False  # 是否保存HTML到本地文件
HTML_STORAGE_DIR = BASE_DIR / "data" / "html"  # HTML存储目录
HTML_STORAGE_DIR.mkdir(parents=True, exist_ok=True)

# 日志配置
LOG_LEVEL = "INFO"
LOG_DIR = BASE_DIR / "logs"
LOG_DIR.mkdir(parents=True, exist_ok=True)
LOG_FILE = LOG_DIR / "spider.log"

# 爬取配置
MAX_CONCURRENT_REQUESTS = 5  # 最大并发请求数
DOWNLOAD_DELAY = 2  # 下载延迟（秒）

# 增量爬取配置
INCREMENTAL_CRAWL = True  # 是否启用增量爬取
CRAWL_SINCE_DAYS = 7  # 爬取最近N天的数据

# 断点续传配置
RESUME_FROM_CHECKPOINT = True  # 是否支持断点续传
CHECKPOINT_FILE = BASE_DIR / "data" / "checkpoint.json"